package com.jt.provider.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 基于此controller演示配置中心的作用.
 * 在这个controller中我们会基于日志对象
 * 进行日志输出测试.
 */
//@Slf4j
@RefreshScope//监听nacoas配置中心有没有变化，重新构建此对象
@RestController
public class ProviderLogController {
    //创建一个日志对象
    //org.slf4j.Logger (Java中的日志API规范,基于这个规范有Log4J,Logback等日志库)
    //org.slf4j.LoggerFactory
    //log对象在哪个类中创建,getLogger方法中的就传入哪个类的字节码对象
    //记住:以后只要Java中使用日志对象,你就采用下面之中方式创建即可.
    //假如在log对象所在的类上使用了@Slf4j注解,log不再需要我们手动创建,lombok会帮我们创建
    private static Logger log=
            LoggerFactory.getLogger(ProviderLogController.class);
    @GetMapping("/provider/log/doLog01")
    public String doLog01(){//trace<debug<info<warn<error
        log.trace("===trace===");
        log.debug("===debug===");
        log.info("===info====");
        log.warn("===warn===");
        log.error("===error===");
        return "log config test";
    }

    public ProviderLogController(){
        System.out.println("==ProviderLogController()==");
    }
    /**
     * 请问这个配置何时读取?logLevel属性初始化时.
     * 请问logLevel属性何时初始化呢?对象构建时
     * 假如希望logLevel属性值,与配置中心这个配置的值始终是同步的怎么办?
     * 只要修改配置中心的内容,就重新重建对象,然后属性会重新初始化.
     */
    @Value("${logging.level.com.jt:error}")
    private String logLevel;

    @GetMapping("/provider/log/doLog02")
    public String doLog02(){
        log.info("log.level is {}",logLevel);//这里的{}表示占位符
        return "log level is "+logLevel;
    }
}